﻿//https://leetcode.cn/problems/reverse-linked-list/?envType=study-plan-v2&envId=top-100-liked

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head)
    {
        // ListNode* prev=nullptr;
        // ListNode* cur=head;

        // while(cur)
        // {
        //     ListNode* next=cur->next;
        //     cur->next=prev;
        //     prev=cur;
        //     cur=next;
        // }

        // return prev;

        if (!head || !head->next)
        {
            return head;
        }

        ListNode* newhead = reverseList(head->next);
        head->next->next = head;
        head->next = nullptr;
        return newhead;
    }
};
